#include "session_tree_view_model.h"



CSessionTreeViewModel::CSessionTreeViewModel(QObject *parent)
    :QAbstractItemModel(parent)
{
    m_rootItem = new CSessionTreeItem();
    m_icon = new QIcon(":/icon/copy.svg");   //初始化图标
}

CSessionTreeViewModel::~CSessionTreeViewModel()
{
    SAFE_DELETE_ELE(m_icon);
    SAFE_DELETE_ELE(m_rootItem) ;

}

CSessionTreeItem *CSessionTreeViewModel::root()
{
    return m_rootItem;
}

QVariant CSessionTreeViewModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if (orientation == Qt::Horizontal)
    {
        if(role == Qt::DisplayRole)
        {
            return "asdf";
        }
    }
    return QVariant();
}

QModelIndex CSessionTreeViewModel::index(int row, int column, const QModelIndex &parent) const
{
    if (!hasIndex(row, column, parent))
        return QModelIndex();

    CSessionTreeItem *parentItem = itemFromIndex(parent);
    CSessionTreeItem *item = parentItem->child(row);
    if (item)
        return createIndex(row, column, item);
    else
        return QModelIndex();
}

QModelIndex CSessionTreeViewModel::parent(const QModelIndex &index) const
{
    if (!index.isValid())
        return QModelIndex();

    CSessionTreeItem *item = itemFromIndex(index);
    CSessionTreeItem *parentItem = item->parent();

    if (parentItem == m_rootItem)
        return QModelIndex();
    return createIndex(parentItem->row(), 0, parentItem);
}

int CSessionTreeViewModel::rowCount(const QModelIndex &parent) const
{
    if (parent.column() > 0)
        return 0;

    CSessionTreeItem* item = itemFromIndex(parent);
    return item->childCount();
}

int CSessionTreeViewModel::columnCount(const QModelIndex &parent) const
{
    return 1;
}

QVariant CSessionTreeViewModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();
     CSessionTreeItem *item = itemFromIndex(index);
    if (role == Qt::DecorationRole &&
        index.column()==0    //第一列的节点
        //&&  rowCount(index)==0       //子节点数为0
           && item->getIsDir()
            )
        {
           return *m_icon;
        }

    if (role == Qt::DisplayRole)
    {
        return item->getData(index.column());
    }


    return QVariant();
}



CSessionTreeItem *CSessionTreeViewModel::itemFromIndex(const QModelIndex &index) const
{
    if (index.isValid())
    {
        CSessionTreeItem *item = static_cast<CSessionTreeItem *>(index.internalPointer());
        return item;
    }
    return m_rootItem;
}

void CSessionTreeViewModel::insertItem(CSessionTreeItem item, QModelIndex index)
{
    if(!index.isValid()){
        beginResetModel();
        CSessionTreeItem *temp1  = new CSessionTreeItem(m_rootItem);
        temp1->setData(item.getSessionName());
        m_rootItem->addChild(temp1);
        endResetModel();
       return;
    }
    beginResetModel();
    CSessionTreeItem *temp = this->itemFromIndex(index);
    CSessionTreeItem *temp1  = new CSessionTreeItem(temp);
    temp1->setData(item.getSessionName());
    temp->addChild(temp1);
    endResetModel();
}

void CSessionTreeViewModel::delTiem(QModelIndex index)
{

    beginResetModel();
    CSessionTreeItem *temp = this->itemFromIndex(index);
    temp->parent()->removeChildren(temp->row());
    endResetModel();
}


